<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 定义许多相同的代码或者是功能相似的代码，这些代码可能重复的大量使用
        // 函数就是封装了一段可以被重复使用的代码块，目的：提高代码复用性
        // 语法：关键字function 函数名（）{}
        //包含函数声明和函数调用两个部分
        function getsum() { //函数声明
            var sum = 0;
            for (var i = 0; i <= 100; i++) {
                sum += i;
            }
            console.log(sum);
        }
        getsum(); //函数调用

        //函数形参和实参个数不匹配，有别于java（形参和实参数必须相等）
        function Getsum(num1, num2) {
            var Sum = num1 + num2;
            console.log(Sum);
        }
        //形参和实参相同
        Getsum(1, 2);
        //形参和实参的个数不同
        function Getsum1(num1, num2) {
            var Sum = num1 + num2;
            console.log(Sum);
        }
        Getsum1(1, 2, 3);
        //如果形参数多于实参数，这会输出 undefined，如果实参数多于形参数，则按顺序调用，取到形参的个数
        //#函数的返回值，一般情况下函数里面是不写输出语句的，而是返回一个值return
        /* 函数的返回值格式
        function 函数名（）{
            return 需要返回的结果；
        } */
        function get() {
            return 66;
        }
        console.log(get()); //get()=return回来的结果；

        function Get(num1, num2) {
            var sum = num1 + num2;
            return sum;
        }
        console.log(Get(1, 2));
        //return 还有个功能给叫终止函数，return后面的代码将不会被执行,return只能返回一个值，如果返回多个值，以最后一个值为标准
        function Get1(num1, num2) {
            return num1 + num2, num1;
            alert('how are you'); //这后面的代码将不会被执行
        }
        console.log(Get1(5, 6));

        function plusminus(num1, num2) {
            var st = [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
            return st;
        }
        var arr = plusminus(1, 2);
        console.log(arr); //这样可以返回一个整体，返回一个数组（求多个值），还有其他的方法
        //如果有return函数返回的是return后面结果，如果没有return，返回的是undefined

        //函数之间是可以相互调用的
        function fn1() {
            console.log(111);
            fn2();
        }

        function fn2() {
            console.log(222);
        }
        fn1(); //调用这个函数时，可以在fn1中将fn2函数调用

        //函数的2种声明方式
        /* 1.利用函数关键字自定义函数（命名函数）  
        function fn(){}
        2.利用函数表达式（匿名函数）
        var 变量名=function（）{}  fun不是他的名字，是变量名，不是函数名 */
        var fun = function() {
                console.log('我是函数表达式');
            }
            //#在js中没有声明直接赋值的变量也是全局变量，可以在函数中当全局变量使用
        function funn() {
            numm = 20;
        }
        funn();
        console.log(numm); //调用时必须先调用函数，否则将没有这个数值
        //局部变量当程序执行完毕后就会销毁（占用较少内存，节约内存资源），全局变量只有当浏览器关闭后才会销毁（较占内存，）
        //函数的作用域链
        function func1() { //外部函数
            var num = 20;

            function func2() { //内部函数
                console.log(num); //可以调用num相当于内部函数的全局变量
            }
        }
    </script>
</head>

<body>

</body>

</html>
